package com.wondertek.poms.core.service;

import com.wondertek.poms.common.service.IService;
import com.wondertek.poms.common.vo.ResultBean;
import com.wondertek.poms.dao.po.Content;
import com.wondertek.poms.dao.po.PrdCont;
import com.wondertek.poms.dao.po.es.ContentVo;
import com.wondertek.poms.dao.pojo.BcRecodePojo;
import com.wondertek.poms.dao.pojo.PrdContSelPojo;
import com.wondertek.poms.dao.pojo.ProductContentPojo;
import com.wondertek.poms.dao.pojo.ProgramPojo;
import com.wondertek.poms.dao.vo.*;
import org.springframework.data.domain.Page;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @author chenjijiang
 * @description
 */
public interface IPrdContService extends IService<PrdCont, Long> {
    /*/**
     * @Author MrYuan
     * @Date: 2021/2/18 17:48
     * @Description: 节目发布记录列表查询
     * @params:  [entity, page, rows, sord, sidx]
     * @return: org.springframework.data.domain.Page<com.wondertek.poms.dao.pojo.ProgramPojo>
     */
    Page<ProgramPojo> findAll(ProgramPojo entity, int page, int rows, String sord, String sidx);

    /**
     * <p><b>Title:</b> passProductRule </p>
     * <p><b>Description:</b> 判断二级产品的规则是否符合;
     * 限制入包条件：限制规则存在，并且符合限制规则；或者限制规则不存在；然后已选规则存在，且不符合已选规则；反之结束流程
     * </p>
     *
     * @param vo
     * @param productId
     * @return true 表示没通过
     * @author douzi
     */
    public boolean passProductRule(Content vo, Long productId);

    /**
     * <p><b>Title:</b> getPrdContByMmsId</p>
     * <p><b>Description:</b> 通过媒资id、查找所有对应节目</p>
     *
     * @param assetId
     * @return
     * @author douzi
     */
    List<PrdCont> getPrdContByMmsId(String assetId);

    /**
     * <p><b>Title:</b> getPrdContByMmsId</p>
     * <p><b>Description:</b> 通过媒资id、查找二级产品下对应节目</p>
     *
     * @param assetId
     * @param productInfoPackageId
     * @return
     * @author douzi
     */
    List<PrdCont> getPrdContByMmsId(String assetId, Long productInfoPackageId);

    /**
     * <p><b>Title:</b> getPrdContByMmsIdInPrdInfo</p>
     * <p><b>Description:</b> 通过媒资id、查找商品包下对应节目</p>
     *
     * @param assetId
     * @param prdInfoId
     * @return
     * @author douzi
     */
    List<PrdCont> getPrdContByMmsIdInPrdInfo(String assetId, Long prdInfoId);

    List<PrdCont> getSerialsAllPublish(Long prdInfoId, Long mssId);

    /**
     * <p><b>Title:</b> findParent</p>
     * <p><b>Description:</b> 二级产品下，获取父内容对应节目</p>
     *
     * @param liveContentId
     * @param productInfoPackageId
     * @return
     * @author douzi
     */
    List<PrdCont> findPcByContentId(String liveContentId, Long productInfoPackageId);

    /**
     * <p><b>Title:</b> getbcListByPrdContId</p>
     * <p><b>Description:</b> 组装播控对象，用于生成传输xml</p>
     *
     * @param prdContId
     * @param bcId
     * @return
     * @author douzi
     */
    public List<ProductContentPojo> getbcListByPrdContId(Long prdContId, Long bcId);

    /**
     * <p><b>Title:</b> findPcByContentIdInPrdInfo</p>
     * <p><b>Description:</b> 通过内容id、查找商品包下对应节目</p>
     *
     * @param liveContentId
     * @param prdInfoId
     * @return
     * @author douzi
     */
    List<PrdCont> findPcByContentIdInPrdInfo(String liveContentId, Long prdInfoId);

    public List<ContentVo> getListByLike(Map<String, Object> map,
                                         Integer start, Integer limit, Long prdInfoId);

    /**
     * 查询节目列表
     *
     * @param prdContSelPojo 查询节目列表参数
     * @param page           页码
     * @param rows           每页数据
     * @param sord           排序方式
     * @param sidx           排序字段
     * @return
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/10 10:58
     */
    public Page<PrdContVo> findAll(PrdContSelPojo prdContSelPojo, int page, int rows, String sord, String sidx);

    /**
     * 查询节目列表
     *
     * @param prdContSelPojo 查询节目列表参数
     * @param page           页码
     * @param rows           每页数据
     * @param sord           排序方式
     * @param sidx           排序字段
     * @return
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/10 10:58
     */
    public List<PrdContVo> findPrdContVoList(PrdContSelPojo prdContSelPojo, int page, int rows, String sord, String sidx);

    /**
     * 查询节目详情
     *
     * @param prdContId 节目id
     * @return 节目
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/10 10:58
     */
    public PrdContDetailVo findPrdContDetailVoById(Long prdContId);

    /**
     * 查询节目详情
     *
     * @param prdContId 节目id
     * @return 节目
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/10 10:58
     */
    public ResultBean findPrdContDetailImgById(Long prdContId, Long contentId) throws IOException;

    /**
     * 查询直播节目列表
     *
     * @param contentId 内容id
     * @param prdInfoId 商品包id
     * @param dateTime  开始时间
     * @param endTime   结束时间
     * @return 直播节目
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/10 10:58
     */
    public List<LivePlayVo> findLivePlayList(String prdInfoId, String contentId, String dateTime, String endTime);

    /**
     * 查询直播节目【单】列表
     *
     * @param prdContId 节目id
     * @param contentId 内容id
     * @param playDay   直播日期
     * @return 直播节目【单】
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/10 10:58
     */
    public ResultBean findLivePlaybillList(String prdContId, String contentId, String playDay);

    /**
     * 查询视频列表 或预告
     *
     * @param prdInfoId   商品包
     * @param contentId   内容id
     * @param contentFrom 内容形态
     * @return 直播节目【单】
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/10 10:58
     */
    public List<SerialVo> getSerialList(String contentId, String prdInfoId, String contentFrom);

    /**
     * 查询一级二级产品和对应商品包树结构列表
     *
     * @return 树结构
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/28 9:47
     */
    public List<TreeVo> findPrdAndCont();

    /**
     * 查询一级和对应商品包树结构列表 （有一级产品且没有二级产品的商品包）
     *
     * @param ids 过滤的1级产品id
     * @return 树结构
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/28 9:47
     */
    public List<TreeVo> findFirstPrdAndCont(String ids);

    /**
     * 一键叫审(央视)
     *
     * @param prdContIds 节目idS
     * @param contentIds 内容idS
     * @param level      紧急程度 0:普通 1:热点 2:紧急 50:极速
     * @return 树结构
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/28 9:47
     */
    public ResultBean emergencyBc(String prdContIds, String contentIds, String level);

    /**
     * 查询内容对应图片
     *
     * @param contentId 内容id
     * @return 图片
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/28 9:47
     */
    public List<ImageVo> getPubImages(String contentId);

    /**
     * 查询内容对应图片
     *
     * @param prdContId 节目id
     * @return 图片
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/28 9:47
     */
    public PrdCont getPrdContByPrdContId(Long prdContId);

    /**
     * 缺集补全
     *
     * @param prdContId 节目id
     * @return 图片
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2020/12/28 9:47
     */
    public ResultBean addMiss(Long prdContId);

    /**
     * 更新紧急状态
     *
     * @param isEmergency 0-非紧急，1-紧急
     * @param prdContIds  节目id
     * @return 节目数
     */
    public int batchUpdateIsEmergencyById(String isEmergency, List<Long> prdContIds);

    /**
     * 根据子集媒资id获取壳
     *
     * @param mmisId
     * @param prdInfoId
     * @return lc
     */
    PrdCont getShellPrdContByMsssIdAndPrdInfoId(Long mmisId, Long prdInfoId);

    /**
     * 根据内容id获取详细信息
     *
     * @param contentid
     * @return
     */
    String findDetailByContentId(String contentid);

    /**
     * <p><b>Title:</b>  </p>
     * <p><b>Description:</b> 查询节目新发布状态 </p>
     *
     * @param
     * @return
     * @author gaozhengxing gaozhenghang@wondertek.com.cn
     * @date 2021/2/5 10:21
     */
    Integer findNewPubStatusByPrdContId(Long prdContId);

}
